#include <stdio.h>
#include <assert.h>
#include <time.h>

#include "ncurses.h"
#include "jeu.h"
#include "disposition.h"

void ncursAff( WINDOW* win, const Jeu *je)
{
	int x,y;
	mvwprintw(win,1,1,"coinche");

    const Dispo *terrain = jeGet_Const_Terrain_Ptr(je);
    wclear(win);

	for(x=0;x<diGet_DimX(terrain);++x)
		for(y=0;y<diGet_DimY(terrain);++y)
        {
			mvwprintw( win, x, y, "%c", diTer_GetXY(terrain,x,y) );

        }
}

void ncursBoucle(Jeu *je)
{
	WINDOW *win, *screen;
	int c;
	int continue_boucle;

	 /* Horloges (en secondes) */
    float horloge_courante, horloge_precedente;

    /* Intervalle de temps (en secondes) entre deux évolutions du jeu */
    /* Changer la valeur pour ralentir ou accélérer le déplacement des fantomes */
    float intervalle_horloge = 0.1f;

	screen = initscr();		/* passe l'écran texte en mode NCurses */
	clear();		/* efface l'écran */
	noecho();  	/* Lorsqu'une touche est préssée au clavier, elle n'apparait pasa à l'écran */
	cbreak();		/* un caractère est directement affiché, il ne passe pas dans un buffer */

	/* Creation d'une nouvelle fenetre en mode texte */
	/* => fenetre de dimension et position ( WIDTH, HEIGHT, STARTX,STARTY) */
	win = newwin( diGet_DimX(jeGet_Const_Terrain_Ptr(je)), diGet_DimY(jeGet_Const_Terrain_Ptr(je)), 0, 0);
	keypad(win, TRUE);		/* pour que les flèches soient traitées (il faut le faire après création de la fenêtre) */

	//halfdelay(temps_dizieme);
	/* notimeout(win,true); */
	/* wtimeout( win, 500 ); */
	nodelay(win,true); /* Pour que l'appel à wgetch soit non-bloquant */

	continue_boucle = 1;

	/* Récupère l'horloge actuelle et la convertit en secondes */
    /* clock() retourne le nombre de tops horloge depuis le lancement du programme */
    horloge_precedente = (float)clock()/(float)CLOCKS_PER_SEC;

    ncursAff( win, je);

	do
	{
        /* Récupère l'horloge actuelle et la convertit en secondes */
        /* clock() retourne le nombre de tops horloge depuis le lancement du programme */
        horloge_courante = (float)clock()/(float)CLOCKS_PER_SEC;

        if (horloge_courante-horloge_precedente>=intervalle_horloge)
        {
                ncursAff( win, je);
                horloge_precedente = horloge_courante;
        }


		c = wgetch(win);
		switch(c)
		{
	/*		case KEY_LEFT:
				jeuActionClavier(je, 'g');
				ncursAff( win, je);
				break;
			case KEY_RIGHT:
				jeuActionClavier( je, 'd');
				ncursAff( win, je);
				break;
			case KEY_UP:
				jeuActionClavier( je, 'h');
				ncursAff( win, je);
				break;
			case KEY_DOWN:
				jeuActionClavier( je, 'b');
				ncursAff( win, je);
				break;  */
			case 27: /* ECHAP */
				continue_boucle = 0;
				break;
		}
	} while (continue_boucle==1);

    assert(delwin(win)!=ERR);
    assert(delwin(screen)!=ERR);

	endwin();
}
